#ifndef _AUDIO_TYPES_H_
#define _AUDIO_TYPES_H_

typedef enum {
    AUD_BITS_16 = 16,
    AUD_BITS_24 = 24,

    AUD_BITS_NONE = 0xFF,
} AUD_BITS_T;

typedef enum {
    AUD_SAMPRATE_8000 = 8000,
    AUD_SAMPRATE_11025 = 11025,
    AUD_SAMPRATE_12000 = 12000,
    AUD_SAMPRATE_16000 = 16000,
    AUD_SAMPRATE_22050 = 22050,
    AUD_SAMPRATE_24000 = 24000,
    AUD_SAMPRATE_32000 = 32000,
    AUD_SAMPRATE_44100 = 44100,
    AUD_SAMPRATE_48000 = 48000,
    AUD_SAMPRATE_88200 = 88200,
    AUD_SAMPRATE_96000 = 96000,
    AUD_SAMPRATE_128000 = 128000,
    AUD_SAMPRATE_176400 = 176400,
    AUD_SAMPRATE_192000 = 192000,

    AUD_SAMPRATE_NONE = 0,
} AUD_SAMPRATE_T;

typedef enum {
    AUD_CH_NUM_1 = 1,
    AUD_CH_NUM_2 = 2,
    AUD_CH_NUM_3 = 3,
    AUD_CH_NUM_4 = 4,
    AUD_CH_NUM_5 = 5,
    AUD_CH_NUM_6 = 6,
    AUD_CH_NUM_7 = 7,
    AUD_CH_NUM_8 = 8,

    AUD_CH_NUM_NONE = 0xFF,
} AUD_CH_NUM_T;

#define AUD_CH_MAP_CH_0    (0x01UL << 0)
#define AUD_CH_MAP_CH_1    (0x01UL << 1)
#define AUD_CH_MAP_CH_2    (0x01UL << 2)
#define AUD_CH_MAP_CH_3    (0x01UL << 3)
#define AUD_CH_MAP_CH_4    (0x01UL << 4)
#define AUD_CH_MAP_CH_5    (0x01UL << 5)
#define AUD_CH_MAP_CH_6    (0x01UL << 6)
#define AUD_CH_MAP_CH_7    (0x01UL << 7)

typedef enum {
    AUD_DEVICE_NONE = 0,
    AUD_DEVICE_I2S0,
    AUD_DEVICE_I2S1,
    AUD_DEVICE_EXT_CODEC_I2S0,
    AUD_DEVICE_EXT_CODEC_I2S1,
    AUD_DEVICE_PCM,
    AUD_DEVICE_EXT_CODEC_PCM,
    AUD_DEVICE_SPDIF,
    AUD_DEVICE_EXT_CODEC_SPDIF,
    AUD_DEVICE_INT_AIC1000,
    AUD_DEVICE_EXT_AIC1000,
    AUD_DEVICE_NUM,
} AUD_DEVICE_T;

typedef enum {
    AUD_PATH_TX01 = 0,
    AUD_PATH_TX23,
    AUD_PATH_RX01,
    AUD_PATH_RX23,
    AUD_PATH_NUM,

    AUD_PATH_NONE = 0xFF,
} AUD_PATH_T;

typedef enum  {
    AUD_STREAM_GROUP_0 = 0,
    AUD_STREAM_GROUP_1,
    AUD_STREAM_GROUP_NUM,
} AUD_STREAM_GROUP_T;

typedef enum {
    AUD_STREAM_PLAYBACK = 0,
    AUD_STREAM_CAPTURE,
    AUD_STREAM_NUM,
} AUD_STREAM_T;

typedef enum {
    AUD_VOLUME_LEVEL_PROMPT = 0,
    AUD_VOLUME_LEVEL_MUTE,

    AUD_VOLUME_LEVEL_0,
    AUD_VOLUME_LEVEL_1,
    AUD_VOLUME_LEVEL_2,
    AUD_VOLUME_LEVEL_3,
    AUD_VOLUME_LEVEL_4,
    AUD_VOLUME_LEVEL_5,
    AUD_VOLUME_LEVEL_6,
    AUD_VOLUME_LEVEL_7,
    AUD_VOLUME_LEVEL_8,
    AUD_VOLUME_LEVEL_9,
    AUD_VOLUME_LEVEL_10,
    AUD_VOLUME_LEVEL_11,
    AUD_VOLUME_LEVEL_12,
    AUD_VOLUME_LEVEL_13,
    AUD_VOLUME_LEVEL_14,
    AUD_VOLUME_LEVEL_15,

    AUD_VOLUME_LEVEL_NUM
} AUD_VOLUME_LEVEL_T;

typedef enum{
    AUD_SPEED_NORMAL = 0,
    AUD_SPEED_HIGH,
    AUD_SPEED_LOW,
    AUD_SPEED_DIE_LOW,
} AUD_SPEED_MODE;

typedef enum{
    AUD_DPLL_NORMAL = 0,
    AUD_DPLL_TWS,
} AUD_DPLL_MODE;

typedef enum {
    AUD_BUFFER_STATUS_NONE = 0,
    AUD_BUFFER_STATUS_START,
    AUD_BUFFER_STATUS_RESTART,
    AUD_BUFFER_STATUS_REACH_THRESHOLD,
    AUD_BUFFER_STATUS_NUM,
} AUD_BUFFER_STATUS;

#endif
